为了账号安全,请及时绑定邮箱和手机立即绑定

框架学习总结——hibernate(学习中)

标签:
Java

Hibernate(jdbc冬眠—数据库细节看不到了)数据层框架
一、基本配置

  1. 创建vo类
  2. 导包:数据库驱动包,hibernate核心包,第三方jar包
  3. 配置文件:hibernate\project\etc\hibernate.cfg.xml
    属性:hibernate.properties
    log4j:log for java
  4. 实体类配置文件hibernate-distribution-3.6.10.Final\project\hibernate-testsuite\src\test\resources\org\hibernate\test\annotations\Ferry.hbm.xml
  5. 配置文件引入mapping标签:resource
    (如果断网状态,手动关联dtd文件,dtd文件在hibernate-distribution-3.6.10.Final\project\hibernate-core\src\main\resources\org\hibernate目录下,添加到src目录,window>preferences>xml>xml catalog>)

二、建表

  1. 创建test类
  2. 加载配置文件
    Configuration cfg=new Configuration().configure();
  3. 创建输出表
    SchemaExport export=new SchemaExport(cfg);//根据配置文件,输出计划
    export.create(true, true);//是否显示sql语句,是否覆盖原内容
    (版本问题,2.0读取.properties,3.0读取.xml,4.0注解)

三、实现增删改查
1.创建JUnit Test Cate
2.写增删改查方法
a.创建对象,传递参数
b.读取配置文件
c.创建session工厂对象,创建session对象
d.创建session对象,添加事务处理Transaction:
开启事务-增删改查-事务提交-事务回滚-关闭
查看sql语句,hibernate.cfg.xml配置文件增加属性,show_sql,format_sql

四、ORM(Object/Relation Mapping)对象/关系 映射
Hibernate
优点:
提高了开发效率
使开发更具对象化
使应用具有可移植性
轻量级框架,无需继承任何父类,无侵入性
缺点:
不使用数据库的特性语句,使调优困难
不适用于大批量的数据更新
不适用于大量的统计查询
Hibernate的基本组件

Hibernate的核心接口

Hibernate的对象
1.Configuration类负责配置
a.XML文件(hibernate.cfg.xml)3.0
Configuration cfg=new Configuration().configure();
b.属性文件(hibernate.properties)
Configuration cfg=new Configuration();
2.SchemaExport(输出设计表)
SchemaExport export=new SchemaExport(cfg);
export.create(true,true);是否显示sql语句,是否覆盖原来的内容
3.SessionFactory(会话工厂)
SessionFactory factory=cfg.buildSessionFactory();
4.Session代表应用与数据库系统的一次操作
Session session=factory.openSession();
session.close();
5.Transaction事务

五、基本映射
vo类映射文件
表名table
字段column 长度length
字段唯一not-null=”true”
字段不为空unique=”true”

六、主键映射
generator主键生成策略

  1. 由数据库提供主键生成机制:identity(MySQL,SQL Server),sequence(Oracle)
  2. 由外部程序提供主键生成机制:increment(递增),uuid(IP地址+JVM的启动时间(精确到1/4秒)+系统时间+一个计数器值(在JVM中唯一)),hilo(高低位算法,使用指定的表),seqhilo(高低位,使用序列)
  3. native(数据库生成,即identity或sequence),assigned(手工生成),foreign(引用别的类的id)

七、持久化对象的生命周期
新建HibernateUtil工具类优化代码

  1. private static SessionFactory factory;
  2. static{}
  3. 返回session对象
  4. 关闭session

瞬时状态,持久状态,脱管状态

八、get和load
get任何情况都会发sql语句
load用到对象才会发sql语句
load支持lazy loading延迟加载
企业中,应用服务器与数据服务器是分离的在不同的机器中,跨机器操作开销很大,用load节省资源

九、many2one
User实体类加属性:private Company company;
User配置文件加属性:<many-to-one name=”company” column=”com_id” cascade=”save-update”/>
级联:保存用户信息,顺便保存公司信息
(级联的四个属性:save-update,delete,all,none)
Test类中加company属性

十、one2many
Company类添加Set<User> users属性
Company配置文件加属性:
<set name=”users”/>属性
<key column=”com_id”/>字段
<one-to-many class=”vo/User”/>类
保存班级信息,先保存学生信息,防止瞬时状态异常
用for(User u:Users){}输出学生信息
(一对多效率比较低,可以添加翻转属性inverse=”true”,由学生类控制维护,相当于转换成多对一)

十一、many2many

十二、查询机制
标准化对象查询(Criteria Query)×很少
Hibernate查询语言(Hibernate Query Language,HQL)用得最多
Native SQL Queries(原生SQL查询)

HQL支持所有的关系数据库操作
连接(Joins,包括inner/outer/full joins)
投影(Projection)
聚合(Aggregation,如max,sum)和分组(Group)
排序(Ordering)
子查询(Subqueries)
调用原生SQL函数(SQL function calls)

HQL分页查询
List students=session.createQuery(“from Student”)
.setFirstResult(1) //起始记录位置,从0开始计数
.setMaxResults(2) //返回的记录个数
.list();

update与delette
update:
Query query =session.createQuery
(“update Student set name=’zhang’ where name=’Zhang’ ”);
query.executeUpdate();
delete:
session.createQuery(“delete Student where name=’Zhang’ ”).executeUpdate();
只支持insert into…select…形式,不支持insert into…values…形式

原生SQL查询
session.createSQLQuery(“selete *from t_student”).list();
返回List<Object[]>

十三、一级缓存
在一个session内,打开与关闭之间来查。用得比较少,效率低。

十四、二级缓存
跨session的缓存

点击查看更多内容
14人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消